//
//  HHPTableViewCellModel.h
//  HHPTableViewManager
//
//  Created by 韩红坡 on 2017/3/8.
//  Copyright © 2017年 韩红坡. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@class HHPTableViewSectionModel;
@class HHPTableViewCellModel;

@protocol HHPTableViewCellProtocol <NSObject>

@optional

/**
 从数据模型更新cell内容
 
 @param cellModel 数据模型
 */
- (void)setCellModel:(id)cellModel;

/**
 cell结束展示后调用
 */
- (void)didEndDisplay;

@end

@interface HHPRowActionModel : NSObject

@property (nonatomic, assign) UITableViewRowActionStyle actionStyle;
@property (nonatomic, copy) NSString *actiontitle;
@property (nonatomic, strong) UIColor *actionBackgroundColor;
@property (nonatomic, copy) void (^actionBlock)(UITableView *, HHPTableViewCellModel *);

@end

@interface HHPTableViewCellModel : NSObject

/** cell模型关联的section模型 */
@property (nonatomic, weak, readonly) HHPTableViewSectionModel *sectionModel;

/** 点击后自动取消选中，默认YES */
@property (nonatomic, assign) BOOL autoDeselect;

/** 是否为最后一行，可以用来隐藏cell下面的横线 (本属性需要调用者自己控制) */
@property (nonatomic, assign) BOOL isLastRow;

/** 是否为第一行，可以用来隐藏cell下面的横线 (本属性需要调用者自己控制) */
@property (nonatomic, assign) BOOL isFirstRow;

/** 点击时是否显示高亮，默认NO，当cellActionEnabled为NO时没有效果 */
@property (nonatomic, assign) BOOL highlightWhenTapCell;

/** 是否支持点击，触发didSelectCellBlock，默认YES */
@property (nonatomic, assign) BOOL cellActionEnabled;

/** 点击cell执行的block，selectionIsChanged为YES表示此cell之前未被选中 */
@property (nonatomic, copy) void (^didSelectCellBlock)(HHPTableViewCellModel *cellModel, BOOL selectionIsChanged);

/** 设置滑动显示按钮组model */
@property (nonatomic, copy) NSMutableArray * (^rowActionModelArrayBlock)();

/** 指定此行固定行高，此时cellHeight方法的返回值对此行不再有效（若不设值rowHeight, cellHeight也不设置，则此行高自适应） */
@property (nonatomic, assign) CGFloat rowHeight;


/**
 空白cell模型
 
 @return self
 */
+ (instancetype)blankCellModel;

/**
 指定高度的空白cell模型
 
 @param height 固定的高度
 
 @return self
 */
+ (instancetype)blankCellModelWithHeight:(CGFloat)height;

/**
 设置点击cell执行的block，selectionIsChanged为YES表示此cell之前未被选中
 
 @param didSelectCellBlock 点击cell执行的block
 */
- (void)setDidSelectCellBlock:(void (^)(HHPTableViewCellModel *cellModel, BOOL selectionIsChanged))didSelectCellBlock;

/**
 cell类型
 
 @return cell类型
 */
- (Class)cellClass;

/**
 cell高度（设置的是这一类cell的高度，若指定rowHeight，则此方法无效）
 
 @return cell高度
 */
- (CGFloat)cellHeight;

@end
